/********************************************************************************
  * @file     SD93F115B_op.c   						    	
  * @author   TEST TEAM 												    	
  * @version  v0															    	
  * @date     Septemper 2022												    	
  * @brief
  *
  * Copyright (C) 2022  Hangzhou SDIC Microelectronics Co., Ltd
**********************************************************************************/

/* Includes*/
    
#include "SD93F115B_op.h"

/*----------------------------------------------------
 * 函数功能：将OP相关寄存器复位为上电默认值
 * 入口参数：None
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *----------------------------------------------------*/ 
 void OP_DeInit(void)
 {
	OP->OP_CR=0;
 }
 
/*-----------------------------------------------------------------
 * 函数功能：初始化OP相关参数
 * 入口参数：OP_InitStruct: pointer to a OP_InitStruct structure that
 *           contains the configuration information for the specified OP peripheral.
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *-----------------------------------------------------------------*/ 
void OPInit(uint8_t OPx,OP_InitTypeDef* OP_InitStruct)
 {
	/* Check the parameters */
	assert_param(IS_OPPS_Channel(OP_InitStruct->OPPS));
	assert_param(IS_OPNS_Channel(OP_InitStruct->OPNS));
	assert_param(IS_OP_OPCS(OP_InitStruct->OPCSx));
	
	uint32_t PS=OP_InitStruct->OPPS;
	uint32_t NS=OP_InitStruct->OPNS;
	uint32_t tmpreg=0;
	
	if(OPx==OPA)
	{
		tmpreg=OP->OP_CR & 0xFFFFFFC1;
		tmpreg|=(PS<<4)|(NS<<2);
		
		OP->OP_CR=tmpreg;
		OP->OP_CR|=(OP_InitStruct->OPCSx<<0);
	}
	else
	{
		tmpreg=OP->OP_CR & 0xFFC1FFFF;
		tmpreg|=(PS<<20)|(NS<<18);
		
		OP->OP_CR=tmpreg;
		OP->OP_CR|=(OP_InitStruct->OPCSx<<16);
	}

 }
 
/*-----------------------------------------------------------------------------
 * 函数功能：配置OPA输出端
 * 入口参数：OPAOUTAx:OPAOUT_A5,OPAOUT_A6,OPAOUT_A7,OPAOUT_A8
 *			 NewState: ENABLE或者DISABLE
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *-----------------------------------------------------------------------------*/  
 void OPAOUTChannelConfig(uint32_t OPAOUTAx,FunctionalState NewState)
 {
	/* Check the parameters */
	assert_param(IS_OPAOUT_Channel(OPAOUTAx));
	assert_param(IS_FUNCTIONAL_STATE(NewState));
	
	if (NewState == ENABLE)
	{	
		OP->OP_CR|= OPAOUTAx;							
	} 
	else 
	{
		OP->OP_CR &=~OPAOUTAx;		
	} 
 }
 
/*----------------------------------------------------
 * 函数功能：使能OPA
 * 入口参数：NewState: ENABLE或者DISABLE
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *----------------------------------------------------*/ 
 void OPACmd(FunctionalState NewState)
 {
	/* Check the parameters */
	assert_param(IS_FUNCTIONAL_STATE(NewState));
	
	if (NewState == ENABLE)
	{	
		OP->OP_CR|= OP_CR_OPAEN;							
	} 
	else 
	{
		OP->OP_CR &=~OP_CR_OPAEN;		
	}
 }
 
/*----------------------------------------------------
 * 函数功能：使能OPB
 * 入口参数：NewState: ENABLE或者DISABLE
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *----------------------------------------------------*/  
void OPBCmd(FunctionalState NewState)
{
	/* Check the parameters */
	assert_param(IS_FUNCTIONAL_STATE(NewState));
	
	if (NewState == ENABLE)
	{	
		OP->OP_CR|=OP_CR_OPBEN;							
	} 
	else 
	{
		OP->OP_CR &=~OP_CR_OPBEN;		
	}
} 


 /*----------------------------------------------------
 * 函数功能：A0拉低使能
 * 入口参数：NewState: ENABLE或者DISABLE
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *----------------------------------------------------*/ 
 void VGSWCmd(FunctionalState NewState)
 {
	/* Check the parameters */
	assert_param(IS_FUNCTIONAL_STATE(NewState));
	
	if (NewState == ENABLE)
	{	
		OP->OP_CR|= OP_CR_VGSW;							
	} 
	else 
	{
		OP->OP_CR &=~OP_CR_VGSW;		
	}
 }


/****************************END OF FILE****************************/  